package com.example.sid.ui.fragments.initializer

import android.graphics.Color
import android.util.Log
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.Fragment
import com.example.sid.R
import com.example.sid.data.ValueRamStorage
import com.example.sid.how_to_use.AsyncSIDFacade
import com.example.sid.ui.app.App
import com.example.sid.utils.Utils
import kotlinx.coroutines.launch
import sberid.sdk.ui.models.root.UIColorMode

/**
 * Фрагмент-подсказка.
 * Инициализация происходит в [com.example.sid.app.App] или в момент получения клиентским приложением айди.
 * Это самый первый метод SDK, который должен быть вызван иначе он сообщит об этом в [Exception] форме
 */
class InitializeFragment : Fragment(R.layout.fragment_initialize) {
	private val statusInitText: TextView get() = requireView().findViewById(R.id.status_init_text)
	private val facadeState: TextView get() = requireView().findViewById(R.id.other_status_text)
	private val initButton: Button get() = requireView().findViewById(R.id.init_button)

	private val initListener: (Boolean) -> Unit = { isInitialized ->
		statusInitText.text = if (isInitialized) "Проинициализирован" else "Ещё не инициализирован"
	}
	

	override fun onStart() {
		super.onStart()
		Utils.getInitializeListener(initListener)
		facadeAddString("запущен 1-й поток до инициализации")
		Utils.ioScope.launch {
			val url = AsyncSIDFacade.createUriForLogin(
				clientId = ValueRamStorage.partnerID,
				scope = ValueRamStorage.partnerScope,
				state = ValueRamStorage.partnerState,
				nonce = ValueRamStorage.partnerNonce,
				redirectUri = ValueRamStorage.partnerUrlRedirect,
				customTabRedirectUri = null,
				codeChallenge = null,
				codeChallengeMethod = null,
				uriScheme = null,
				loginHint = null
			)
			Log.e("InitializeFragment", "дождались инициализации 1 - $url")

			facadeAddString("завершен 1-й поток после инициализации")
		}
		facadeAddString("запущен 2-й поток до инициализации")
		Utils.ioScope.launch {
			AsyncSIDFacade.setCustomFonts(null, null)
			Log.e("InitializeFragment", "дождались инициализации 2")
			facadeAddString("завершен 2-й поток после инициализации")
		}
		facadeAddString("запущен 3-й поток до инициализации")
		Utils.ioScope.launch {
			AsyncSIDFacade.setCustomFonts(null, null)
			Log.e("InitializeFragment", "дождались инициализации 3")
			facadeAddString("завершен 3-й поток после инициализации")
		}
		facadeAddString("запущен 4-й поток до инициализации")
		Utils.ioScope.launch {
			AsyncSIDFacade.setCustomFonts(null, null)
			Log.e("InitializeFragment", "дождались инициализации 4")
			facadeAddString("завершен 4-й поток после инициализации")
		}
		facadeAddString("запущен 5-й поток до инициализации")
		Utils.ioScope.launch {
			AsyncSIDFacade.setUIMode(UIColorMode.AUTO)
			Log.e("InitializeFragment", "дождались инициализации 5")
			facadeAddString("завершен 5-й поток после инициализации")
		}

		initButton.setOnClickListener {
			Utils.ioScope.launch {
				AsyncSIDFacade.initialize(
					application = App.application,
					clientId = ValueRamStorage.partnerID,
					partnerName = ValueRamStorage.partnerName,
					partnerProfileUrl = ValueRamStorage.partnerProfileURL,
					themeColorLight = Color.RED,
					themeColorDark = Color.GREEN,
					isShowErrorOnMain = ValueRamStorage.isShowError
				)
			}
		}

	}

	private fun facadeAddString(s: String){
		Utils.main.launch {
			facadeState.text = facadeState.text.toString() + s +"\n"
		}

	}

	override fun onDestroy() {
		super.onDestroy()
		Utils.removeInitializeListener(initListener)
	}

}